From 9163f084a5b7fbf1b55ae80958b4c4ca26e6c88b Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Sat, 3 Jun 2006 13:21:14 -0600 Subject: [PATCH] [IA64] fix vmx_vcpu_ptr_i(), vmx_vcpu_ptr_d() They must purge all tr registers which overlap. not only one. Signed-off-by: Isaku Yamahata --- xen/arch/ia64/vmx/vmmu.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/xen/arch/ia64/vmx/vmmu.c b/xen/arch/ia64/vmx/vmmu.c index 4470e53efd..31a52152f1 100644 --- a/xen/arch/ia64/vmx/vmmu.c +++ b/xen/arch/ia64/vmx/vmmu.c @@ -456,8 +456,7 @@ IA64FAULT vmx_vcpu_ptr_d(VCPU *vcpu,UINT64 ifa,UINT64 ps) u64 va; va = PAGEALIGN(ifa, ps); - index = vtr_find_overlap(vcpu, va, ps, DSIDE_TLB); - if (index>=0) { + while ((index = vtr_find_overlap(vcpu, va, ps, DSIDE_TLB)) >= 0) { vcpu->arch.dtrs[index].pte.p=0; } thash_purge_entries(vcpu, va, ps); @@ -470,8 +469,7 @@ IA64FAULT vmx_vcpu_ptr_i(VCPU *vcpu,UINT64 ifa,UINT64 ps) u64 va; va = PAGEALIGN(ifa, ps); - index = vtr_find_overlap(vcpu, va, ps, ISIDE_TLB); - if (index>=0) { + while ((index = vtr_find_overlap(vcpu, va, ps, ISIDE_TLB)) >= 0) { vcpu->arch.itrs[index].pte.p=0; } thash_purge_entries(vcpu, va, ps); -- 2.30.2